package com.wjerp.tplus.server.domain.service;

import com.wjerp.tplus.server.api.response.ValueEnumResponse;
import com.wjerp.tplus.server.common.exception.BusinessException;
import com.wjerp.tplus.server.common.model.LoginUserDetailInfo;
import com.wjerp.tplus.server.common.model.SystemUserWrapper;
import com.wjerp.tplus.server.common.security.JwtUser;
import com.wjerp.tplus.server.domain.entity.sys.PermissionActionRelation;
import com.wjerp.tplus.server.domain.entity.sys.UserInfo;
import com.wjerp.tplus.server.domain.entity.sys.UserPermission;

import java.util.List;
import java.util.Map;

/**
 *  用户基础信息服务接口
 * @author lishuailei
 */
public interface UserInfoService {
    /**
     * 根据显示用户ID和用户类型获取用户权限信息列表
     * @param displayUserId 显示用户ID
     * @param userType 用户类型
     * @return 用户权限信息列表
     */
    List<String> findUserPermissionByDisplayUserIdAndUserType(String displayUserId, Integer userType) throws BusinessException;

    /**
     * 根据手机号或者邮箱地址获取用户信息
     * @param searchKey 搜索信息
     * @return 用户信息
     */
    UserInfo findByMobileOrEmail(String searchKey);

    /**
     * 根据显示ID获取用户信息
     * @param displayUserId 显示用户ID
     * @return 用户信息
     * @throws BusinessException
     */
    UserInfo findUserInfoByDisplayUserId(String displayUserId) throws BusinessException;

    /**
     * 新增系统用户
     * @param systemUserWrapper 系统用户参数信息
     * @param currentLoginUserInfo
     * @throws BusinessException 异常信息
     */
    void createSystemUser(SystemUserWrapper systemUserWrapper, JwtUser currentLoginUserInfo) throws BusinessException;

    /**
     * 编辑用户信息
     * @param userId 用户ID
     * @param systemUserWrapper 系统用户参数信息
     * @param currentLoginUserInfo
     * @throws BusinessException 异常信息
     */
    void updateSystemUser(Long userId, SystemUserWrapper systemUserWrapper, JwtUser currentLoginUserInfo)throws BusinessException;

    /**
     * 重置登陆密码
     * @param userId 用户ID
     * @throws BusinessException 异常信息
     */
    void resetUserPassword(String userId) throws BusinessException;

    /**
     * 获取系统用户信息.
     *
     * @param name the name
     * @param userName the user name
     * @param status the status
     * @param startDate the start date
     * @param endDate the end date
     * @param page the page
     * @param size the size
     * @param i the i
     * @return the map
     */
    Map<String, Object> findSystemUserListByPage(String name, String userName, Boolean status, String startDate, String endDate, Integer page, Integer size, int i);

    /**
     * 更新用户状态
     * @param userId 用户ID
     * @param status 用户状态
     * @throws BusinessException 异常信息
     */
    void updateUserStatus(String userId, boolean status) throws BusinessException;

    /**
     * 修改用户密码
     * @param displayUserId 用户显示ID
     * @param password 密码
     * @throws BusinessException 异常信息
     */
    void modifyPassword(String displayUserId, String password) throws BusinessException;

    /**
     * 给指定用户分配权限信息
     * @param userId 用户ID
     * @param userPermissions 权限信息列表
     * @throws BusinessException 异常信息
     */
    void distributionPermissionByUser(Long userId, List<UserPermission> userPermissions) throws BusinessException;

    /**
     * 获取所有的权限对应请求表信息.
     *
     * @return the list
     */
    List<PermissionActionRelation> findAllPermissionActionRelation();

    /**
     * 获取登录用户信息.
     *
     * @param displayUserId the display user id
     * @return the user detail info
     * @throws BusinessException the business exception
     */
    LoginUserDetailInfo getUserDetailInfo(String displayUserId)throws BusinessException;

    /**
     * 根据用户ID列表获取用户信息
     * @param displayUserIdList 用户显示ID集合
     * @return 用户信息列表
     */
    List<UserInfo> findUserInfoByDisplayUserIds(List<String> displayUserIdList);

    /**
     * 获取所有的用户信息列表
     * @return 用户信息列表
     */
    List<ValueEnumResponse> findAllUserInfoList();
}
